// DAO/Impl/TagDaoImpl.java
package com.hp.DAO.Impl;                         // 实现包

import com.hp.DAO.BaseDao;                       // 基类
import com.hp.DAO.TagDao;                        // 接口：TagDao
import com.hp.Model.Tag;                         // 实体：标签
import com.hp.Util.RowMapper;                    // 行映射器
import com.hp.Util.SimpleJdbcTemplate;           // JDBC 模板

import java.util.List;                    // List

/** TagDao 的 JDBC 实现 */
public class TagDaoImpl extends BaseDao implements TagDao {
    public TagDaoImpl(SimpleJdbcTemplate jdbc) { super(jdbc); } // 构造注入

    // RowMapper：ResultSet -> Tag
    private static final RowMapper<Tag> M = rs -> {
        Tag t = new Tag();                                        // 新建实体
        t.setId(rs.getLong("id"));                                 // id
        t.setName(rs.getString("name"));                           // 名称
        return t;                                                  // 返回
    };

    @Override
    public Tag findById(Long id) {                                 // 按主键查询
        String sql = "SELECT id,name FROM tag WHERE id=?";         // SQL
        return queryOne(sql, M, id);                                // 执行
    }

    @Override
    public Tag findByName(String name) {                           // 按名称查询
        String sql = "SELECT id,name FROM tag WHERE name=?";       // SQL
        return queryOne(sql, M, name);                              // 执行
    }

    @Override
    public List<Tag> listAll(int offset, int limit) {              // 分页列出全部
        String sql = "SELECT id,name FROM tag ORDER BY id DESC LIMIT ? OFFSET ?"; // SQL
        return queryList(sql, M, limit, offset);                    // 执行
    }

    @Override
    public Long insert(Tag t) {                                     // 新增标签
        String sql = "INSERT INTO tag (name) VALUES (?)";           // SQL
        return execInsertReturnId(sql, t.getName());                // 执行插入
    }

    @Override
    public int rename(Long id, String newName) {                    // 重命名
        String sql = "UPDATE tag SET name=? WHERE id=?";            // SQL
        return execUpdate(sql, newName, id);                        // 执行更新
    }

    @Override
    public int deleteById(Long id) {                                // 删除
        String sql = "DELETE FROM tag WHERE id=?";                  // SQL
        return execUpdate(sql, id);                                 // 执行
    }
}
